package demo12.javaProxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

/**
 * 保护代理：基于调用者控制对对象方法的访问。
 * 
 * 表示不是本人的代理，（只能修改评级）
 * */
public class NonOwnerInvocationHandler implements InvocationHandler {
	PersonBean person;
	 
	public NonOwnerInvocationHandler(PersonBean person) {
		this.person = person;
	}
 
	@Override
	public Object invoke(Object proxy, Method method, Object[] args) 
			throws IllegalAccessException {
  
		try {
			if (method.getName().startsWith("get")) {
				return method.invoke(person, args);
   			} else if (method.getName().equals("setHotOrNotRating")) {
   				//别可以修改评级
				return method.invoke(person, args);
			} else if (method.getName().startsWith("set")) {
				//但是不能修改名字等信息
				throw new IllegalAccessException();
			} 
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        } 
		return null;
	}
}
